#include "widget_funcc_smart_home.h"
#include "ui_widget_funcc_smart_home.h"

Widget_funcC_Smart_Home::Widget_funcC_Smart_Home(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget_funcC_Smart_Home)
{
    ui->setupUi(this);

    //--------------  TCP 初始化 --------------------
    // 初始化 TCP 通讯
    m_Socket = new QTcpSocket(this);
    // 开始连接
    m_Socket->connectToHost(IP , POST );
    // 连接成功
    connect(this->m_Socket ,&QTcpSocket::connected , this , [=](){
        qDebug() << "连接成功";
        fflush(stdout); // 强制刷新输出
    } );
    // 断开连接
    connect(this->m_Socket ,&QTcpSocket::disconnected , this , [=](){
        qDebug() << "服务器断开连接";
        fflush(stdout); // 强制刷新输出
    } );
    //-------------------------------------

    /*************** 摄像头操作 **********************/
    // 初始化 摄像头相关
    this->M_Camera = new QCamera(this);
    this->M_CameraViewfinder = new QCameraViewfinder(this);
    this->M_CameraImageCapture = new QCameraImageCapture(this->M_Camera);

    // 将 QCamera 的视频输出设置到 QCameraViewfinder
    M_Camera->setViewfinder(this->M_CameraViewfinder);

    // 创建一个垂直布局并将其添加到 ui->widget_8
    layout = new QVBoxLayout(ui->widget_8);
    layout->addWidget(M_CameraViewfinder);
    M_CameraViewfinder->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    ui->widget_8->setFixedSize(240,210);//设置widget固定大小
    ui->widget_8->setLayout(layout);



    connect(ui->pushButton_jiankong_on_off , &QPushButton::clicked,[=](){
        is_Open_Camera = !is_Open_Camera;
        if(is_Open_Camera)
        {
            // 启动摄像头
            M_Camera->start();
            // 设置图片
            ui->pushButton_jiankong_on_off->setIcon(QIcon(":/蓝监控"));
        }
        else {
            // 关闭摄像头
             M_Camera->stop();
             // 设置图片
             ui->pushButton_jiankong_on_off->setIcon(QIcon(":/黑监控"));
        }


    });


    connect(ui->pushButton_jietu,&QPushButton::clicked,[=](){
       // 截图
       // 检查摄像头是否正在运行
       if (M_Camera->state() == QCamera::ActiveState) {
           // 设置捕获模式为静止图像
           M_Camera->setCaptureMode(QCamera::CaptureStillImage);
           // 开始捕获图像
           M_CameraImageCapture->capture();
       }
    });

    // 连接图像捕获信号与槽函数
    connect(M_CameraImageCapture, &QCameraImageCapture::imageCaptured, this,
            [&](int id, const QImage& preview) {
        // 不使用这个变量
        Q_UNUSED (id);

        // 显示或保存截图
        QString fileName = QFileDialog::getSaveFileName
                (this, tr("保存图片"),
                "",
                 tr("Images (*.png *.jpg)"));
        if (!fileName.isEmpty()) {
            if (!preview.save(fileName)) {
                    qDebug() << "Failed to save image to" << fileName;
                } else {
                    qDebug() << "Image saved to:" << fileName;
                }
        }
    });




    /******************  音乐 **************************/



    /******************** 点击开关 发送信号   ********************/
    // 归家 变化导致 归家状态
    connect(ui->label_button_gohome , &Button_On_Off::sig_on_off ,[=](bool isOpen){
        if(isOpen)
        {
            //ui->label_on_off_1->setPixmap(QPixmap(":/开关_开"));
            qDebug() << "开关开";
            fflush(stdout); // 强制刷新输出
            // 开空调
            ui->label_gohome_ice->setPixmap(QPixmap(":/空调开"));
            // 开灯
            ui->label_light_gohome->setPixmap(QPixmap(":/开灯"));

            // 离家灯灭
            ui->label_leave_home_button->setPixmap(QPixmap(":/开关_关"));

            // 发送信息给服务器
            m_Socket->write(QString("开关开").toUtf8());
        }
        else {
             //ui->label_on_off_1->setPixmap(QPixmap(":/开关_关"));
             qDebug() << "开关关";
             fflush(stdout); // 强制刷新输出
             // 关空调
             ui->label_gohome_ice->setPixmap(QPixmap(":/空调关"));
             // 关灯
             ui->label_light_gohome->setPixmap(QPixmap(":/关灯"));

             // 离家灯亮
             ui->label_leave_home_button->setPixmap(QPixmap(":/开关_开"));

             // 发送信息给服务器
             m_Socket->write(QString("开关关").toUtf8());
        }
    });
    // 离家 变化导致归家 状态
    connect(ui->label_leave_home_button , &Button_On_Off::sig_on_off ,[=](bool isOpen){
        if(!isOpen)
        {
            //ui->label_on_off_1->setPixmap(QPixmap(":/开关_开"));
            qDebug() << "开关开";
            fflush(stdout); // 强制刷新输出
            // 开空调
            ui->label_gohome_ice->setPixmap(QPixmap(":/空调开"));
            // 开灯
            ui->label_light_gohome->setPixmap(QPixmap(":/开灯"));

            // 归家灯亮
            ui->label_button_gohome->setPixmap(QPixmap(":/开关_开"));

            // 发送信息给服务器
            m_Socket->write(QString("开关开").toUtf8());
        }
        else {
             //ui->label_on_off_1->setPixmap(QPixmap(":/开关_关"));
             qDebug() << "开关关";
             fflush(stdout); // 强制刷新输出
             // 关空调
             ui->label_gohome_ice->setPixmap(QPixmap(":/空调关"));
             // 关灯
             ui->label_light_gohome->setPixmap(QPixmap(":/关灯"));

             // 归家灯亮
             ui->label_button_gohome->setPixmap(QPixmap(":/开关_关"));

             // 发送信息给服务器
             m_Socket->write(QString("开关关").toUtf8());
        }
    });

    // 离家 变化 离家状态
    connect(ui->label_leave_home_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // 关窗帘
            ui->label_leave_home_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_leave_home_light->setPixmap(QPixmap(":/关灯"));
            // 开扫地机
            ui->label_leave_home_saodi->setPixmap(QPixmap(":/扫地机开"));

            // 归家灯灭
            ui->label_button_gohome->setPixmap(QPixmap(":/开关_关"));

            // 发送信息给服务器
            m_Socket->write(QString("离家").toUtf8());
        }
        else {
            // 开窗帘
            ui->label_leave_home_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 开灯
            ui->label_leave_home_light->setPixmap(QPixmap(":/开灯"));
            // 关扫地机
            ui->label_leave_home_saodi->setPixmap(QPixmap(":/扫地机关"));
            // 发送信息给服务器
            m_Socket->write(QString("回家").toUtf8());
        }
    });
    // 回家 变化 离家状态
    connect(ui->label_button_gohome,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(!isOpen)
        {
            // 关窗帘
            ui->label_leave_home_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_leave_home_light->setPixmap(QPixmap(":/关灯"));
            // 开扫地机
            ui->label_leave_home_saodi->setPixmap(QPixmap(":/扫地机开"));
            // 发送信息给服务器
            m_Socket->write(QString("离家").toUtf8());
        }
        else {
            // 开窗帘
            ui->label_leave_home_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 开灯
            ui->label_leave_home_light->setPixmap(QPixmap(":/开灯"));
            // 关扫地机
            ui->label_leave_home_saodi->setPixmap(QPixmap(":/扫地机关"));
            // 发送信息给服务器
            m_Socket->write(QString("回家").toUtf8());
        }
    });

    // 起床
    connect(ui->label_get_up_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // 起床
            // 开窗
            ui->label_get_up_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 开灯
            ui->label_get_up_light->setPixmap(QPixmap(":开灯"));

            // 没睡觉
            ui->label_sleep_button->setPixmap(QPixmap(":/开关_关"));
            // 开窗
            ui->label_sleep_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 开灯
            ui->label_sleep_light->setPixmap(QPixmap(":开灯"));

            // 发送信息给服务器
            m_Socket->write(QString("起床").toUtf8());

        }
        else {
            // 没起床
            // 关窗
            ui->label_get_up_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_get_up_light->setPixmap(QPixmap(":关灯"));

            // 睡觉了
            ui->label_sleep_button->setPixmap(QPixmap(":/开关_开"));
            // 关窗
            ui->label_sleep_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_sleep_light->setPixmap(QPixmap(":关灯"));
            }

            });

    // 睡觉
    connect(ui->label_sleep_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // 睡觉了
            // 关窗
            ui->label_sleep_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_sleep_light->setPixmap(QPixmap(":关灯"));

            // 没起床
            ui->label_get_up_button->setPixmap(QPixmap(":/开关_关"));
            // 关窗
            ui->label_get_up_chuanglian->setPixmap(QPixmap(":/窗帘关"));
            // 关灯
            ui->label_get_up_light->setPixmap(QPixmap(":关灯"));

            // 发送信息给服务器
            m_Socket->write(QString("睡觉").toUtf8());
        }
        else {
            // 没睡觉
            // 开窗
            ui->label_sleep_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 开灯
            ui->label_sleep_light->setPixmap(QPixmap(":开灯"));

            // 起床了
            ui->label_get_up_button->setPixmap(QPixmap(":/开关_开"));
            // 关窗
            ui->label_get_up_chuanglian->setPixmap(QPixmap(":/窗帘开"));
            // 关灯
            ui->label_get_up_light->setPixmap(QPixmap(":开灯"));
        }


    });

    // 扫地机
    connect(ui->label_saodi_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO
            ui->label_saodi_on_off->setText("NO");
            // icon
            ui->label_saodi_icon->setPixmap(QPixmap(":/扫地机开"));

            // 发送信息给服务器
            m_Socket->write(QString("扫地机器人启动").toUtf8());
        }
        else {
            // OFF
            ui->label_saodi_on_off->setText("OFF");
            // icon
            ui->label_saodi_icon->setPixmap(QPixmap(":/扫地机关"));
        }
    });

    // 路由器
    connect(ui->label_luyouqi_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO
            ui->label_luyouqi_on_off->setText("NO");
            // icon
            ui->label_luyouqi_icon->setPixmap(QPixmap(":/路由器开"));

            // 发送信息给服务器
            m_Socket->write(QString("路由器打开").toUtf8());
        }
        else {
            // NO/OFF
            ui->label_luyouqi_on_off->setText("OFF");
            // icon
            ui->label_luyouqi_icon->setPixmap(QPixmap(":/路由器关"));

        }
    });

    // 窗帘
    connect(ui->label_chuanglian_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO/OFF
            ui->label_chuanglian_on_off->setText("ON");
            // icon
            ui->label_chuanglian_icon->setPixmap(QPixmap(":/窗帘开"));

            // 发送信息给服务器
            m_Socket->write(QString("窗帘开").toUtf8());
        }
        else {
            // NO/OFF
            ui->label_chuanglian_on_off->setText("OFF");
            // icon
            ui->label_chuanglian_icon->setPixmap(QPixmap(":/窗帘关"));
        }
    });

    // 冰箱
    connect(ui->label_ice_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO/OFF
            ui->label_ice_on_off->setText("ON");
            // icon
            ui->label_ice_icon->setPixmap(QPixmap(":/冰箱开"));
            // 发送信息给服务器
            m_Socket->write(QString("冰箱开").toUtf8());
        }
        else {
            // NO/OFF
            ui->label_ice_on_off->setText("OFF");
            // icon
            ui->label_ice_icon->setPixmap(QPixmap(":/冰箱关"));

        }
    });

    // 空调
    connect(ui->label_kongtiao_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO/OFF
            ui->label_kongtiao_on_off->setText("ON");
            // icon
            ui->label_kongtiao_icon->setPixmap(QPixmap(":/空调开"));

            // 发送信息给服务器
            m_Socket->write(QString("空调开").toUtf8());
        }
        else {
            // NO/OFF
            ui->label_kongtiao_on_off->setText("OFF");
            // icon
            ui->label_kongtiao_icon->setPixmap(QPixmap(":/空调关"));

        }
    });

    // 灯
    connect(ui->label_light_button,&Button_On_Off::sig_on_off,[=](bool isOpen){
        if(isOpen)
        {
            // NO/OFF
            ui->label_light_on_off->setText("ON");
            // icon
            ui->label_light_icon->setPixmap(QPixmap(":/开灯"));

            // 发送信息给服务器
            m_Socket->write(QString("开灯").toUtf8());
        }
        else {
            // NO/OFF
            ui->label_light_on_off->setText("OFF");
            // icon
            ui->label_light_icon->setPixmap(QPixmap(":/关灯"));
        }
    });

    /******************************************************************/


    /******************* 开始游戏 ***********************/
    // 初始化
    this->m_game = new My_Game(this);
    connect(ui->pushButton_game,&QPushButton::clicked,[=](){
        qDebug() << "开始游戏";
        m_game->show();
    });

}

Widget_funcC_Smart_Home::~Widget_funcC_Smart_Home()
{
    delete ui;
}
